package com.itcam.cm.manager.controller;


import com.itcam.cm.manager.service.SysUserService;
import com.itcam.cm.model.dto.system.SysUserDto;
import com.itcam.cm.model.entity.system.SysRole;
import com.itcam.cm.model.entity.system.SysUser;
import com.itcam.cm.model.vo.common.Result;
import com.github.pagehelper.PageInfo;
import com.itcam.cm.model.vo.common.ResultCodeEnum;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@CrossOrigin(allowCredentials = "true", originPatterns = "*", allowedHeaders = "*")
@RequestMapping("/admin/system/sysUser")
@Tag(name = "用户管理接口")
public class SysUserController {

    @Autowired
    SysUserService sysUserService;

    /**
     * 分页查询系统用户信息
     * 该方法接收一个 SysUserDto 对象用于条件查询，以及页码和每页数量作为分页参数
     * 调用 SysUserService 的 findByPage 方法进行分页查询，并将结果封装在 Result 对象中返回
     *
     * @param sysUserDto 包含用户查询条件的 DTO 对象
     * @param pageNum    当前页码，从请求路径的 {pageNum} 变量中获取
     * @param pageSize   每页显示的记录数量，从请求路径的 {pageSize} 变量中获取
     * @return 包含分页信息的 Result 对象，状态码为成功
     */
    public Result<PageInfo<SysUser>> findByPage(SysUserDto sysUserDto,
                                                @PathVariable(value = "pageNum") Integer pageNum,
                                                @PathVariable(value = "pageSize") Integer pageSize) {
        PageInfo<SysUser> pageInfo = sysUserService.findByPage(sysUserDto, pageNum, pageSize);
        return Result.build(pageInfo, ResultCodeEnum.SUCCESS);
    }


    @GetMapping("getSysUserListByPage/{page}/{limit}")
    public Result<PageInfo<SysUser>> getSysUserListByPage(@PathVariable Integer page,
                                                          @PathVariable Integer limit,
                                                          SysUserDto sysUserDto) {
        PageInfo<SysUser> sysUserPageInfo = sysUserService.getSysUserListByPage(page, limit, sysUserDto);
        return Result.ok(sysUserPageInfo);
    }

//    @PostMapping("saveSysUser")
//    public Result saveSysUser(@RequestBody SysUser sysUser) {
//        sysUserService.saveSysUser(sysUser);
//        return Result.ok(null);
//    }

    /**
     * 保存系统用户信息
     * 该方法用于将前端传递的系统用户信息保存到数据库中。
     * 接收一个封装了系统用户信息的 SysUser 对象，通过调用 SysUserService 的 saveSysUser 方法完成保存操作。
     * 保存成功后，返回一个表示操作结果的 Result 对象，该对象的数据部分为 null，状态码为成功。
     *
     * @param sysUser 封装了待保存系统用户信息的对象，从请求体中获取。
     * @return 一个表示操作结果的 Result 对象，数据部分为 null，状态码为成功。
     */
    @PostMapping(value = "/sysUser")
    public Result saveSysUser(@RequestBody SysUser sysUser) {
        // 调用 SysUserService 的 saveSysUser 方法，将传入的 SysUser 对象中的信息保存到数据库
        sysUserService.saveSysUser(sysUser);
        // 返回一个表示操作成功的 Result 对象，数据部分为 null，状态码为成功
        return Result.build(null, ResultCodeEnum.SUCCESS);
    }


    @PutMapping("updateSysUser")
    public Result updateSysUser(@RequestBody SysUser sysUser) {
        sysUserService.updateSysUser(sysUser);
        return Result.ok(null);
    }


    /**
     * 根据id删除用户
     * @param userId
     * @return
     */
    @Operation(summary = "根据id删除用户")
    @DeleteMapping(value = "/deleteById/{userId}")
    public Result deleteById(@PathVariable(value = "userId") Long userId) {
        sysUserService.deleteById(userId);
        return Result.build(null, ResultCodeEnum.SUCCESS);
    }

}
